package nxu.it.dao.implement;

import nxu.it.dao.TodoStorage;
import nxu.it.model.Todo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;

public class MemoryTodoStorageImpl implements TodoStorage {
   private static List<Todo> todoList=new ArrayList<>();
    @Override
    public List<Todo> list() {
        return todoList;
    }

    @Override
    public Optional<Todo> get(int id) {
        return todoList.stream().filter(todo -> todo.getId()==id).findFirst();
    }

    @Override
    public void save(Todo todo) {
         if(todo!=null&&todo.getId()!=null&&todo.getContent()!=null){
          todoList.add(todo);
         }
    }

    @Override
    public void delete(int id) {
     Iterator<Todo> iterator=todoList.iterator();
     while(iterator.hasNext()){
      if(iterator.next().getId().intValue()==id){
       iterator.remove();
       break;
      }
     }
    }

    @Override
    public void update(Todo todo) {
        if(todo==null||todo.getId()==null){
          return;
        }
        Optional<Todo> todoOpt=get(todo.getId());
        todoOpt.ifPresent(t -> {
          t.setContent(todo.getContent());
          t.setComplete(todo.getComplete());
        });
    }

    @Override
    public void check(int id) {
     Optional<Todo> todoOpt=get(id);
     todoOpt.ifPresent(t -> t.setComplete(!t.getComplete()));
    }
}
